5  bulkTCRseq: Frequency plot of IMP expanded clones

5.1 Set up workspace

# Libraries
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.0.4     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(patchwork)

5.2 Load IMP expanded clones

p101_betas_expanded <- read.csv("p101_betas_merged_typed_imp_expanded_Part3.csv")
p103_betas_expanded <- read.csv("p103_betas_merged_typed_imp_expanded_Part3.csv")
p104_betas_expanded <- read.csv("p104_betas_merged_typed_imp_expanded_Part3.csv")
p105_betas_expanded <- read.csv("p105_betas_merged_typed_imp_expanded_Part3.csv")
p106_betas_expanded <- read.csv("p106_betas_merged_typed_imp_expanded_Part3.csv")
p108_betas_expanded <- read.csv("p108_betas_merged_typed_imp_expanded_Part3.csv")
p109_betas_expanded <- read.csv("p109_betas_merged_typed_imp_expanded_Part3.csv")
p110_betas_expanded <- read.csv("p110_betas_merged_typed_imp_expanded_Part3.csv")
p111_betas_expanded <- read.csv("p111_betas_merged_typed_imp_expanded_Part3.csv")
p110_betas_expanded <- read.csv("p110_betas_merged_typed_imp_expanded_Part3.csv")
p111_betas_expanded <- read.csv("p111_betas_merged_typed_imp_expanded_Part3.csv")

5.3 Massage data for frequency lineplot

p101_lineplot_data <- p101_betas_expanded %>%
  select(c(Beta_clonotype, p101_pretreatment, p101_prevax, p101_postvax, expanded_local_min, Type)) %>%
  dplyr::rename("Pre-treatment" = "p101_pretreatment", "Pre-vax" = "p101_prevax", "Post-vax" = "p101_postvax") %>% 
  pivot_longer(!c(Beta_clonotype, expanded_local_min, Type), names_to = "Timepoint", values_to = "Frequency") %>%
  mutate(Frequency = replace_na(Frequency, 0),
         Timepoint = factor(Timepoint, levels = c("Pre-treatment", "Pre-vax", "Post-vax")),
         Type = factor(Type, levels = c("Existing", "Post-Nivolumab", "Post-Vaccine")),
         Beta_clonotype = forcats::fct_reorder(as.factor(Beta_clonotype), rank(Type)))

p103_lineplot_data <- p103_betas_expanded %>%
  select(c(Beta_clonotype, p103_pretreatment, p103_prevax, p103_postvax, p103_w48, p103_w72, expanded_local_min, Type)) %>%
  dplyr::rename("Pre-treatment" = "p103_pretreatment", "Pre-vax" = "p103_prevax", "Post-vax" = "p103_postvax", "W48" = "p103_w48", "W72" = "p103_w72") %>% 
  pivot_longer(!c(Beta_clonotype, expanded_local_min, Type), names_to = "Timepoint", values_to = "Frequency") %>%
  mutate(Frequency = replace_na(Frequency, 0),
         Timepoint = factor(Timepoint, levels = c("Pre-treatment", "Pre-vax", "Post-vax", "W48", "W72")),
         Type = factor(Type, levels = c("Existing", "Post-Nivolumab", "Post-Vaccine")),
         Beta_clonotype = forcats::fct_reorder(as.factor(Beta_clonotype), rank(Type)))

p104_lineplot_data <- p104_betas_expanded %>%
  select(c(Beta_clonotype, p104_pretreatment, p104_prevax, p104_postvax, p104_w48,  expanded_local_min, Type)) %>%
  dplyr::rename("Pre-treatment" = "p104_pretreatment", "Pre-vax" = "p104_prevax", "Post-vax" = "p104_postvax", "W48" = "p104_w48") %>% 
  pivot_longer(!c(Beta_clonotype, expanded_local_min, Type), names_to = "Timepoint", values_to = "Frequency") %>%
  mutate(Frequency = replace_na(Frequency, 0),
         Timepoint = factor(Timepoint, levels = c("Pre-treatment", "Pre-vax", "Post-vax", "W48")),
         Type = factor(Type, levels = c("Existing", "Post-Nivolumab", "Post-Vaccine")),
         Beta_clonotype = forcats::fct_reorder(as.factor(Beta_clonotype), rank(Type)))

p105_lineplot_data <- p105_betas_expanded %>%
  select(c(Beta_clonotype, p105_pretreatment, p105_prevax, p105_postvax, p105_w48, expanded_local_min, Type)) %>%
  dplyr::rename("Pre-treatment" = "p105_pretreatment", "Pre-vax" = "p105_prevax", "Post-vax" = "p105_postvax", "W48" = "p105_w48") %>% 
  pivot_longer(!c(Beta_clonotype, expanded_local_min, Type), names_to = "Timepoint", values_to = "Frequency") %>%
  mutate(Frequency = replace_na(Frequency, 0),
         Timepoint = factor(Timepoint, levels = c("Pre-treatment", "Pre-vax", "Post-vax", "W48")),
         Type = factor(Type, levels = c("Existing", "Post-Nivolumab", "Post-Vaccine")),
         Beta_clonotype = forcats::fct_reorder(as.factor(Beta_clonotype), rank(Type)))

p106_lineplot_data <- p106_betas_expanded %>%
  select(c(Beta_clonotype, p106_pretreatment, p106_prevax, p106_postvax, p106_w48, expanded_local_min, Type)) %>%
  dplyr::rename("Pre-treatment" = "p106_pretreatment", "Pre-vax" = "p106_prevax", "Post-vax" = "p106_postvax", "W48" = "p106_w48") %>% 
  pivot_longer(!c(Beta_clonotype, expanded_local_min, Type), names_to = "Timepoint", values_to = "Frequency") %>%
  mutate(Frequency = replace_na(Frequency, 0),
         Timepoint = factor(Timepoint, levels = c("Pre-treatment", "Pre-vax", "Post-vax", "W48")),
         Type = factor(Type, levels = c("Existing", "Post-Nivolumab", "Post-Vaccine")),
         Beta_clonotype = forcats::fct_reorder(as.factor(Beta_clonotype), rank(Type)))

p108_lineplot_data <- p108_betas_expanded %>%
  select(c(Beta_clonotype, p108_pretreatment, p108_prevax, p108_postvax, p108_w32, expanded_local_min, Type)) %>%
  dplyr::rename("Pre-treatment" = "p108_pretreatment", "Pre-vax" = "p108_prevax", "Post-vax" = "p108_postvax", "W32" = "p108_w32") %>% 
  pivot_longer(!c(Beta_clonotype, expanded_local_min, Type), names_to = "Timepoint", values_to = "Frequency") %>%
  mutate(Frequency = replace_na(Frequency, 0),
         Timepoint = factor(Timepoint, levels = c("Pre-treatment", "Pre-vax", "Post-vax", "W32")),
         Type = factor(Type, levels = c("Existing", "Post-Nivolumab", "Post-Vaccine")),
         Beta_clonotype = forcats::fct_reorder(as.factor(Beta_clonotype), rank(Type)))

p109_lineplot_data <- p109_betas_expanded %>%
  select(c(Beta_clonotype, p109_pretreatment, p109_prevax, p109_postvax, p109_w48, expanded_local_min, Type)) %>%
  dplyr::rename("Pre-treatment" = "p109_pretreatment", "Pre-vax" = "p109_prevax", "Post-vax" = "p109_postvax", "W48" = "p109_w48") %>% 
  pivot_longer(!c(Beta_clonotype, expanded_local_min, Type), names_to = "Timepoint", values_to = "Frequency") %>%
  mutate(Frequency = replace_na(Frequency, 0),
         Timepoint = factor(Timepoint, levels = c("Pre-treatment", "Pre-vax", "Post-vax", "W48")),
         Type = factor(Type, levels = c("Existing", "Post-Nivolumab", "Post-Vaccine")),
         Beta_clonotype = forcats::fct_reorder(as.factor(Beta_clonotype), rank(Type)))

p110_lineplot_data <- p110_betas_expanded %>%
  select(c(Beta_clonotype, p110_pretreatment, p110_prevax, p110_postvax, p110_w38, expanded_local_min, Type)) %>%
  dplyr::rename("Pre-treatment" = "p110_pretreatment", "Pre-vax" = "p110_prevax", "Post-vax" = "p110_postvax", "W38" = "p110_w38") %>% 
  pivot_longer(!c(Beta_clonotype, expanded_local_min, Type), names_to = "Timepoint", values_to = "Frequency") %>%
  mutate(Frequency = replace_na(Frequency, 0),
         Timepoint = factor(Timepoint, levels = c("Pre-treatment", "Pre-vax", "Post-vax", "W38")),
         Type = factor(Type, levels = c("Existing", "Post-Nivolumab", "Post-Vaccine")),
         Beta_clonotype = forcats::fct_reorder(as.factor(Beta_clonotype), rank(Type)))

p111_lineplot_data <- p111_betas_expanded %>%
  select(c(Beta_clonotype, p111_pretreatment, p111_prevax, p111_postvax, p111_w40, expanded_local_min, Type)) %>%
  dplyr::rename("Pre-treatment" = "p111_pretreatment", "Pre-vax" = "p111_prevax", "Post-vax" = "p111_postvax", "W40" = "p111_w40") %>% 
  pivot_longer(!c(Beta_clonotype, expanded_local_min, Type), names_to = "Timepoint", values_to = "Frequency") %>%
  mutate(Frequency = replace_na(Frequency, 0),
         Timepoint = factor(Timepoint, levels = c("Pre-treatment", "Pre-vax", "Post-vax", "W40")),
         Type = factor(Type, levels = c("Existing", "Post-Nivolumab", "Post-Vaccine")),
         Beta_clonotype = forcats::fct_reorder(as.factor(Beta_clonotype), rank(Type)))

5.4 Objects for the LOD lines

indiv_lod_line <- geom_hline(yintercept = 0.0001, linetype = "dashed", color = "red")
p101_lod_annot <- annotate("text", x = as.numeric(p101_lineplot_data$Timepoint[[3]]) + 0.25, y = 0.00015, label = "LOD", size = 4, color = "red")
p103_lod_annot <- annotate("text", x = as.numeric(p103_lineplot_data$Timepoint[[5]]) + 0.25, y = 0.00016, label = "LOD", size = 4, color = "red")
p104_lod_annot <- annotate("text", x = as.numeric(p104_lineplot_data$Timepoint[[4]]) + 0.25, y = 0.00013, label = "LOD", size = 4, color = "red")
p105_lod_annot <- annotate("text", x = as.numeric(p105_lineplot_data$Timepoint[[4]]) + 0.25, y = 0.00015, label = "LOD", size = 4, color = "red")
p106_lod_annot <- annotate("text", x = as.numeric(p106_lineplot_data$Timepoint[[4]]) + 0.25, y = 0.00016, label = "LOD", size = 4, color = "red")
p108_lod_annot <- annotate("text", x = as.numeric(p108_lineplot_data$Timepoint[[4]]) + 0.25, y = 0.00017, label = "LOD", size = 4, color = "red")
p109_lod_annot <- annotate("text", x = as.numeric(p109_lineplot_data$Timepoint[[4]]) + 0.25, y = 0.00016, label = "LOD", size = 4, color = "red")
p110_lod_annot <- annotate("text", x = as.numeric(p110_lineplot_data$Timepoint[[4]]) + 0.25, y = 0.00016, label = "LOD", size = 4, color = "red")
p111_lod_annot <- annotate("text", x = as.numeric(p111_lineplot_data$Timepoint[[4]]) + 0.25, y = 0.00016, label = "LOD", size = 4, color = "red")

5.5 Plot frequency over time

Plotting individual lines with high transparency and a thick line for mean frequency

# Get mean
p101_mean <- p101_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  select(-Beta_clonotype) %>%
  group_by(Type, Timepoint) %>%
  summarise(mean = mean(Frequency)) %>%
  mutate(Patient = "P101")
`summarise()` has grouped output by 'Type'. You can override using the
`.groups` argument.
# Plot expanded local min invitro
p101_lineplot <- p101_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  ggplot() +
  geom_line(aes(x = Timepoint, y = Frequency, color = Type, group = Beta_clonotype), alpha = 0.2) +
  geom_line(data = p101_mean, aes(x = Timepoint, y = mean, color = Type, group = Type), size = ifelse(p101_mean$Type=="Post-Vaccine", 2, 1)) +
  scale_color_manual(values = c("grey70", "darkgoldenrod3", "#0072B2")) +
  scale_y_log10() +
  annotation_logticks(sides = "l") +
  ggtitle("P101") +
  theme_classic() +
  theme(plot.title = element_text(hjust=0.5),
        axis.text.x = element_text(size = 7)) +
  indiv_lod_line +
  p101_lod_annot
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.
# Get mean
p103_mean <- p103_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  select(-Beta_clonotype) %>%
  group_by(Type, Timepoint) %>%
  summarise(mean = mean(Frequency)) %>%
  mutate(Patient = "P103")
`summarise()` has grouped output by 'Type'. You can override using the
`.groups` argument.
# Plot expanded local min invitro
p103_lineplot <- p103_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  ggplot() +
  geom_line(aes(x = Timepoint, y = Frequency, color = Type, group = Beta_clonotype), alpha = 0.2) +
  geom_line(data = p103_mean, aes(x = Timepoint, y = mean, color = Type, group = Type), size = ifelse(p103_mean$Type=="Post-Vaccine", 2, 1)) +
  scale_color_manual(values = c("grey70", "darkgoldenrod3", "#0072B2")) +
  scale_y_log10() +
  annotation_logticks(sides = "l") +
  ggtitle("P103") +
  theme_classic() +
  theme(plot.title = element_text(hjust=0.5),
        axis.text.x = element_text(size = 7)) +
  indiv_lod_line +
  p103_lod_annot
  
# Get mean
p104_mean <- p104_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  select(-Beta_clonotype) %>%
  group_by(Type, Timepoint) %>%
  summarise(mean = mean(Frequency)) %>%
  mutate(Patient = "P104")
`summarise()` has grouped output by 'Type'. You can override using the
`.groups` argument.
# Plot expanded local min invitro
p104_lineplot <- p104_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  ggplot() +
  geom_line(aes(x = Timepoint, y = Frequency, color = Type, group = Beta_clonotype), alpha = 0.2) +
  geom_line(data = p104_mean, aes(x = Timepoint, y = mean, color = Type, group = Type), size = ifelse(p104_mean$Type=="Post-Vaccine", 2, 1)) +
  scale_color_manual(values = c("grey70", "#0072B2"), guide="none") +
  scale_y_log10() +
  annotation_logticks(sides = "l") +
  ggtitle("P104") +
  theme_classic() +
  theme(plot.title = element_text(hjust=0.5),
        axis.text.x = element_text(size = 7)) +
  indiv_lod_line +
  p104_lod_annot

# Get mean
p105_mean <- p105_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  select(-Beta_clonotype) %>%
  group_by(Type, Timepoint) %>%
  summarise(mean = mean(Frequency)) %>%
  mutate(Patient = "P105")
`summarise()` has grouped output by 'Type'. You can override using the
`.groups` argument.
# Plot expanded local min invitro
p105_lineplot <- p105_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  ggplot() +
  geom_line(aes(x = Timepoint, y = Frequency, color = Type, group = Beta_clonotype), alpha = 0.2) +
  geom_line(data = p105_mean, aes(x = Timepoint, y = mean, color = Type, group = Type), size = ifelse(p105_mean$Type=="Post-Vaccine", 2, 1)) +
  scale_color_manual(values = c("grey70", "darkgoldenrod3", "#0072B2"), guide="none") +
  scale_y_log10() +
  annotation_logticks(sides = "l") +
  ggtitle("P105") +
  theme_classic() +
  theme(plot.title = element_text(hjust=0.5),
        axis.text.x = element_text(size = 7)) +
  indiv_lod_line +
  p105_lod_annot

# Get mean
p106_mean <- p106_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  select(-Beta_clonotype) %>%
  group_by(Type, Timepoint) %>%
  summarise(mean = mean(Frequency)) %>%
  mutate(Patient = "P106")
`summarise()` has grouped output by 'Type'. You can override using the
`.groups` argument.
# Plot expanded local min invitro
p106_lineplot <- p106_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  ggplot() +
  geom_line(aes(x = Timepoint, y = Frequency, color = Type, group = Beta_clonotype), alpha = 0.2) +
  geom_line(data = p106_mean, aes(x = Timepoint, y = mean, color = Type, group = Type), size = ifelse(p106_mean$Type=="Post-Vaccine", 2, 1)) +
  scale_color_manual(values = c("grey70", "darkgoldenrod3", "#0072B2")) +
  scale_y_log10() +
  annotation_logticks(sides = "l") +
  ggtitle("P106") +
  theme_classic() +
  theme(plot.title = element_text(hjust=0.5),
        axis.text.x = element_text(size = 7)) +
  indiv_lod_line  +
  p106_lod_annot

# Get mean
p108_mean <- p108_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  select(-Beta_clonotype) %>%
  group_by(Type, Timepoint) %>%
  summarise(mean = mean(Frequency)) %>%
  mutate(Patient = "P108")
`summarise()` has grouped output by 'Type'. You can override using the
`.groups` argument.
# Plot expanded local min invitro
p108_lineplot <- p108_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  ggplot() +
  geom_line(aes(x = Timepoint, y = Frequency, color = Type, group = Beta_clonotype), alpha = 0.2) +
  geom_line(data = p108_mean, aes(x = Timepoint, y = mean, color = Type, group = Type), size = ifelse(p108_mean$Type=="Post-Vaccine", 2, 1)) +
  scale_color_manual(values = c("grey70", "darkgoldenrod3", "#0072B2")) +
  scale_y_log10() +
  annotation_logticks(sides = "l") +
  ggtitle("P108") +
  theme_classic() +
  theme(plot.title = element_text(hjust=0.5),
        axis.text.x = element_text(size = 7)) +
  indiv_lod_line  +
  p108_lod_annot

# Get mean
p109_mean <- p109_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  select(-Beta_clonotype) %>%
  group_by(Type, Timepoint) %>%
  summarise(mean = mean(Frequency)) %>%
  mutate(Patient = "P109")
`summarise()` has grouped output by 'Type'. You can override using the
`.groups` argument.
# Plot expanded local min invitro
p109_lineplot <- p109_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  ggplot() +
  geom_line(aes(x = Timepoint, y = Frequency, color = Type, group = Beta_clonotype), alpha = 0.2) +
  geom_line(data = p109_mean, aes(x = Timepoint, y = mean, color = Type, group = Type), size = ifelse(p109_mean$Type=="Post-Vaccine", 2, 1)) +
  scale_color_manual(values = c("grey70", "darkgoldenrod3", "#0072B2"), guide="none") +
  scale_y_log10() +
  annotation_logticks(sides = "l") +
  ggtitle("P109") +
  theme_classic() +
  theme(plot.title = element_text(hjust=0.5),
        axis.text.x = element_text(size = 7)) +
  indiv_lod_line  +
  p109_lod_annot

# Get mean
p110_mean <- p110_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  select(-Beta_clonotype) %>%
  group_by(Type, Timepoint) %>%
  summarise(mean = mean(Frequency)) %>%
  mutate(Patient = "P110")
`summarise()` has grouped output by 'Type'. You can override using the
`.groups` argument.
# Plot expanded local min invitro
p110_lineplot <- p110_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  ggplot() +
  geom_line(aes(x = Timepoint, y = Frequency, color = Type, group = Beta_clonotype), alpha = 0.2) +
  geom_line(data = p110_mean, aes(x = Timepoint, y = mean, color = Type, group = Type), size = ifelse(p110_mean$Type=="Post-Vaccine", 2, 1)) +
  scale_color_manual(values = c("grey70", "darkgoldenrod3", "#0072B2")) +
  scale_y_log10() +
  annotation_logticks(sides = "l") +
  ggtitle("P110") +
  theme_classic() +
  theme(plot.title = element_text(hjust=0.5),
        axis.text.x = element_text(size = 7)) +
  indiv_lod_line  +
  p110_lod_annot

# Get mean
p111_mean <- p111_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  select(-Beta_clonotype) %>%
  group_by(Type, Timepoint) %>%
  summarise(mean = mean(Frequency)) %>%
  mutate(Patient = "P111")
`summarise()` has grouped output by 'Type'. You can override using the
`.groups` argument.
# Plot expanded local min invitro
p111_lineplot <- p111_lineplot_data %>%
  filter(expanded_local_min == TRUE) %>%
  ggplot() +
  geom_line(aes(x = Timepoint, y = Frequency, color = Type, group = Beta_clonotype), alpha = 0.2) +
  geom_line(data = p111_mean, aes(x = Timepoint, y = mean, color = Type, group = Type), size = ifelse(p111_mean$Type=="Post-Vaccine", 2, 1)) +
  scale_color_manual(values = c("grey70", "darkgoldenrod3", "#0072B2")) +
  scale_y_log10() +
  annotation_logticks(sides = "l") +
  ggtitle("P111") +
  theme_classic() +
  theme(plot.title = element_text(hjust=0.5),
        axis.text.x = element_text(size = 7)) +
  indiv_lod_line  +
  p111_lod_annot

all_pt_lp <- p101_lineplot + p103_lineplot + p104_lineplot + p105_lineplot + p106_lineplot + p108_lineplot + p109_lineplot + p110_lineplot + p111_lineplot + plot_layout(guides = 'collect', axis_titles = "collect", ncol = 3)  + plot_annotation('Movement of IMP-Expanded Clones',  theme=theme(plot.title=element_text(hjust=0.5, size = 20)))

all_pt_lp

5.6 Get session info

sessionInfo()
R version 4.3.2 (2023-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Rocky Linux 8.10 (Green Obsidian)

Matrix products: default
BLAS/LAPACK: /usr/lib64/libopenblasp-r0.3.15.so;  LAPACK version 3.9.0

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

time zone: America/New_York
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] patchwork_1.3.0 lubridate_1.9.4 forcats_1.0.0   stringr_1.5.1  
 [5] dplyr_1.1.4     purrr_1.0.4     readr_2.1.5     tidyr_1.3.1    
 [9] tibble_3.2.1    ggplot2_3.5.1   tidyverse_2.0.0

loaded via a namespace (and not attached):
 [1] gtable_0.3.6      jsonlite_1.8.9    compiler_4.3.2    tidyselect_1.2.1 
 [5] scales_1.3.0      fastmap_1.2.0     R6_2.6.1          generics_0.1.3   
 [9] knitr_1.49        htmlwidgets_1.6.4 munsell_0.5.1     pillar_1.10.1    
[13] tzdb_0.5.0        rlang_1.1.5       stringi_1.8.4     xfun_0.50        
[17] timechange_0.3.0  cli_3.6.3         withr_3.0.2       magrittr_2.0.3   
[21] digest_0.6.37     grid_4.3.2        rstudioapi_0.17.1 hms_1.1.3        
[25] lifecycle_1.0.4   vctrs_0.6.5       evaluate_1.0.1    glue_1.8.0       
[29] farver_2.1.2      colorspace_2.1-1  rmarkdown_2.29    tools_4.3.2      
[33] pkgconfig_2.0.3   htmltools_0.5.8.1